Column

Water Quality Plot

---
title: "Water Shiny Dashboard"
output: 
  flexdashboard::flex_dashboard:
    orientation: columns
    vertical_layout: fill
    source: embed
runtime: shiny
---

```{r}
library(tidyverse)
library(shiny)
library(flexdashboard)
library(leaflet)
```

```{r}
elk = read.csv(file = "clean_data/elk.csv") |> 
  mutate(date = as.Date(paste(year, month, day, sep = "-")))

water_quality = read.csv(file = "clean_data/water_quality.csv") |> 
  mutate(date = as.Date(paste(year, month, day, sep = "-"))) |> 
  filter(location_id %in% c("GRTE_SNR01", "GRTE_SNR02", "YELL_LM000.5M", "YELL_YS549.7M", "YELL_MD133.2T", "YELL_MDR"))
```



-----------------------------------------------------------------------

```{r}
ui = fluidPage(
  titlePanel("Water Quality Over Time"),
  
  sidebarLayout(
    sidebarPanel(
      sliderInput("year_slider",
                  "Select Year:",
                  min = 2006,
                  max = 2015,
                  value = 2013,
                  step = 1),
                  
      sliderInput("month_slider",
                  "Select Month:",
                  min = 1,
                  max = 12,
                  value = 5,
                  step = 1),
      
      selectInput("characteristic", 
                  "Select Water Quality Characteristic:", 
                  choices = unique(water_quality$characteristic_name),
                  selected = "Arsenic mg/l")
    ),
    
    mainPanel(
      leafletOutput("elkMap", height = 500),
      plotOutput("waterQualityPlot", height = 400)
    )
  )
)
```


Column {data-width=650}
-----------------------------------------------------------------------

### Water Quality Plot

```{r}
elk_icon = makeIcon(
  iconUrl = "data/elk_icon.png", 
  iconWidth = 30, 
  iconHeight = 30)

water_icon = makeIcon(
  iconUrl = "data/water_droplet.png",
  iconWidth = 30,
  iconHeight = 30)
```


```{r}
server = function(input, output) {
  
  filtered_data = reactive({
    water_quality |> 
      filter(characteristic_name == input$characteristic,
             format(date, "%Y") == as.character(input$year_slider),
             format(date, "%m") == sprintf("%02d", input$month_slider)) |> 
      mutate(result_text = as.numeric(result_text))
  })

  filtered_elk = reactive ({
    elk |> 
      filter(format(date, "%Y") == as.character(input$year_slider),
             format(date, "%m") == sprintf("%02d", input$month_slider))
})
  
output$elkMap = renderLeaflet({
  filtered_water_quality = filtered_data()
  filtered_elk_data = filtered_elk() 
  
  map = leaflet() |> 
    addTiles()
 
if(nrow(filtered_water_quality) > 0) {
  map = map |> 
    addMarkers(
      data = filtered_water_quality,
      ~longitude, ~latitude,
      icon = water_icon,
      popup = ~paste("Characteristic: ", characteristic_name,
                     "<br>Value: ", result_text,
                     "<br>Date: ", date),
      group = "Water Quality"
    )
}
  
  
  if (nrow(filtered_elk_data) > 0) {
    map = map |> addMarkers(
      data = filtered_elk_data,
      ~long, ~lat,
      icon = elk_icon, 
    popup = ~paste("Elk Path", "<br>Date: ", date),
    group = "Elk Path"
    )
  }
  
map = map |> 
  addLayersControl(
    overlayGroups = c("Water Quality", "Elk Path"),
    options = layersControlOptions(collapsed = FALSE)
  )

  map
})

output$waterQualityPlot = renderPlot ({
  data - filtered_data()

if(nrow(data) > 0) {
ggplot(data, aes(x = date, y = as.numeric(result_text))) +
    geom_point() +
    labs(
      title = paste("Water Quality of:", input$characteristic, "in", input$month_slider, input$year_slider),
      x = "Date",
      y = paste(input$characteristic, "(mg/l)")
    )
} else {
  ggplot() +
    labs(title = "No data available for the selected year and month")
}  
})
}
```


```{r}
shinyApp(ui = ui, server = server)
#command to knit dashboaord (leaving this here for now, will remove before final submission):
#rmarkdown::render("water_shiny_dashboard.Rmd", output_format = "flexdashboard::flex_dashboard")
```